\chapter{Навигация}
\pagenumbering{arabic}

\section{Закачка карт в GPS навигатор Garmin GPSMap 60CSx}
Не так давно решил разориться на GPS-навигатор, так как по многим местам приходится мотаться и ходить по отечественным картам уже нет никакой возможности. 

Итак, вариантов закачки карт в GPS-навигатор, собственно, два: через эмуляцию /dev/ttyUSB0 по закрытому протоколу Garmin и по Mass Storage.

\subsection{Закачка карт в GPS-навигатор по протоколу Garmin}
Этот вариант оказался самым жизнеспособным. Если ваше ядро собрано с поддержкой \verb+garmin_gps+, то после подключения навигатора к USB штепселю ядро нам должно написать в логах dmesg так:

\begin{lstlisting}
usb 4-1: new full speed USB device using uhci_hcd and address 3
usb 4-1: configuration #1 chosen from 1 choice
drivers/usb/serial/usb-serial.c: USB Serial support registered for Garmin GPS usb/tty
garmin_gps 4-1:1.0: Garmin GPS usb/tty converter detected
usb 4-1: Garmin GPS usb/tty converter now attached to ttyUSB0
usbcore: registered new interface driver garmin_gps
drivers/usb/serial/garmin_gps.c: garmin gps driver v0.28
\end{lstlisting}


Выделенная строчка нам говорит о том, что у нас появился новый порт имени /dev/ttyUSB0 куда мы будем закачивать наши карты.

Где взять карты для GPS-навигаторов Garmin?
Это философский вопрос, и в одном посте на него не ответить. Но для начала можно воспользоваться открытыми картами OpenStreetMaps (после регистрации имеем возможность экспортировать нужные вам куски карт в XML формат).

Уже собранные карты для Garmin, на всякий случай, есть здесь. После распаковки будет много файлов, нам нужен только 008XXX.img

% % Лицензия на материалы этого текста
% 
% Материалы сайта "Записки дебианщика" написаны virens и доступны на условиях лицензии Creative Commons Attribution-Non-Commercial-Share Alike 3.0 Unported License. Вы можете копировать, распространять, показывать эту работу, и создавать производные работы в некоммерческих целях на условиях:
% 
% 1) обязательной ссылки на автора (virens, http://mydebianblog.blogspot.com/) и
% 
% 2) распространении любых производных работ на условиях этой же лицензии (ссылка на эту лицензию 
% обязательна!).
% 
% Пожалуйста соблюдайте условия лицензии.
% 
% This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License. 
\subsection{Программы для закачки карт в GPS-навигаторы для Linux}
Софта под Linux для закачки gps-карт в навигатор немного. Из опробованного мной могу сказать про sendmap. Скажу сразу: версия sendmap17Lstatic, которая Stable version of sendmap with RS support only, не работает у меня никак. При попытке отправить в навигатор карту ругается:

\begin{lstlisting}
./sendmap17Lstatic /dev/ttyUSB0 -s57600 moscowregion.img
GPS SendMap & GetMap version 17, Kozicki@gps.chrisb.org

Checking input files
Preparing...
Failure to communicate with GPS or no maps can be upload into GPS
\end{lstlisting}


Зато работает новая версия, которая на сайте обозначена как Free sendMap20 rev 4.2 BETA for Linux with experimental USB support. С её-то помощью и удалось закачать карту, сделанную для московской области:

\begin{lstlisting}
./sendmap20 -t/dev/ttyUSB0 -s9600 moscowregion.img
Detected : GPSMap60CSX Software Version 3.60
Available memory : 120 MB
Max number of maps: 2025
Final map size : 486 kB
Maps uploaded!
\end{lstlisting}


После этого карта появляется в списке карт навигатора (на всякий случай - у Garmin в устойстве карта может быть только одна, загрузка новой стирает предыдущую).

Параметры можно менять, например, изменить скорость закачки (-s115200) и присвоить карте другое отображаемое имя (-mMOSCOW )

\begin{lstlisting}
./sendmap20 -t/dev/ttyUSB0 -mMOSCOW -s115200 63240001.img 
\end{lstlisting}


После этого навигатор карту видит и может с ней работать. Правда, на той карте географическая привязка была какая-то странная...

\subsubsection{Закачка карт в GPS-навигатор через Mass Storage}
Если выбрать в меню навигатора этот вариант, он станет большой флешкой и вы сможете на него закачивать карты:

\begin{lstlisting}
usb 4-1: new full speed USB device using uhci_hcd and address 4
usb 4-1: configuration #1 chosen from 1 choice
scsi0 : SCSI emulation for USB Mass Storage devices
usb-storage: device found at 4
usb-storage: waiting for device to settle before scanning
scsi 0:0:0:0: Direct-Access Garmin 60x microSD 1.00 PQ: 0 ANSI: 5
sd 0:0:0:0: [sda] 246016 512-byte hardware sectors (126 MB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Mode Sense: 23 00 00 00
sd 0:0:0:0: [sda] Assuming drive cache: write through
sd 0:0:0:0: [sda] 246016 512-byte hardware sectors (126 MB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Mode Sense: 23 00 00 00
sd 0:0:0:0: [sda] Assuming drive cache: write through
sda: sda1
sd 0:0:0:0: [sda] Attached SCSI removable disk
sd 0:0:0:0: Attached scsi generic sg0 type 0
usb-storage: device scan complete
\end{lstlisting}


По идее, монтируем /dev/sda1 и наступает нам счастье. После этого, по идее, нужно создать каталог garmin и закачать туда вашу карту с названием gmapsupp.img

Но здесь есть нюанс: если вы это делаете в первый раз, закачать карты можно, но навигатор карт не видит. Это связано, как я понял, с регистром символов: каталог должен называться Garmin - так, как его создаёт программа sendmap при первой заливке карт.

\section{Garmin 60CSx: технические особенности устройства}
В этом посте мне хотелось собрать раскиданные там и сям разные технические особенности GPS-навигатора Garmin 60CSx. Кроме того, несколько замечаний о картах для Garmin 60CSx. Собственно, о них далее.

Где скачать карты для Garmin? Собственно, на торрентах или пойти и честно воспользоваться картами OpenStreetMaps.
Уже готовые карты OSM по городам есть здесь. Или можно отправиться на сайт OpenStreetMaps, зарегистрироваться там и скачать карту нужной области честно и бесплатно.

Для этого заходим на http://www.openstreetmap.org/ и регистрируемся. Далее выделяем область карты, которую хотим экспортировать (для последующей закачки в навигатор), жмём на Экспорт и просим карту в OSM формате - через некоторое время получаем файлик map.osm. Теперь скачиваем mkmap отсюда, как завещал ув.тов. jetxee в своей бессмертной статье, оно на джаве и требует сановскую джаву версии старше 1.5. С её помощью компилируем в полученный OSM-файл в img формат. Получившийся файл заливаем в гармин с помощью sendmap.

Однако с картами OpenStreetMap есть одна проблема: не дают скачать сразу большую карту (я с жадности запросил у сервера векторную карту всей Москвы с областью). Если нужны большие карты, например, всей РФ, можно податься на Cloudmade.com и скачать оттуда. Этот сайт содержит уже скачанные карты местностей в формате OSM (которые мы потом перегоняем в img для Гармина) и собственно файл IMG, который можно закачать в навигатор.

\subsection{Закачивание карт в Garmin 60CSx}
По сообщениям разных осведомлённых орлов, во внутренней памяти (internal) может находиться до 3 карт, тогда как на флешке (microSD) - только одна. Хотя, как совершенно справедливо попенял многоуважаемый комментатор diaword, на самом деле, никто не мешает скачать несколько карт и потом собрать из них одну. Это можно сделать с помощью утилиты Mkgmap, а её ключик --gmapsupp позволяет собрать результирующую карту из нескольких отдельных и потом залить в навигатор. Файл gmapsupp.img является архивом из нескольких карт *.img, причем их можно как упаковывать, так и обратно распаковывать с помощью sendmap.

А такой финт, как закачка четырёх файлов карт сразу:

\begin{verbatim}
Gmapbmap.img -- базовая карта
Gmapsupp.img -- ваша карта
Gmapsup2.img -- другая карта
Gmapprom.img -- другая карта
\end{verbatim}

на Garmin 60CSx не проходит, к сожалению.

Размер одной карты (img-файл) не может превышать 2Gb, хотя карта может состоять из кусков, число этих кусков не может быть больше 2025.

\subsection{Память и подключение}
Подключение происходит через miniUSB кабель как в режиме MassStorage, так и по специльному протоколу. И тот, и другой вариант поддерживаются в Linux.

В комплекте идёт карта microSD на 64Mb, максимальная поддерживаемая ёмкость карты 4GB micro SDHC.


\section{Маршруты и треки с помощью GPS-навигаторов Garmin}
Отслеживание перемещений по GPS (tracking) это довольно интересная и полезная возможность современных навигаторов. Например, вы пошли в поход или просто в парк, и долго блуждали, пока искали правильный путь - со включённым отслеживанием вы потом сможете дома посмотреть, как можно было бы срезать путь. Или, что тоже важно, по этим данным можно найти обратную дорогу.

Собственно, на навигаторе всё довольно просто: в зависимости от модели, трекинг включается одной-двумя кнопками (в Garmin GPSmap 60CSX - главное меню - Track - ON). После этого на экране должны оставаться точки, которые обозначают ваш путь по местности. Эти данные в абсолютных координатах хранятся в самом навигаторе, и скачать их оттуда можно в Linux довольно просто.

\subsection{Скачиваем треки в гармине под Linux}
Для этого нам понадобится консольная утилита gpsbabel. Её исходники нужно скачать с официального сайта (или посмотреть в репозиториях своего любимого дистрибутива) и собрать. Далее в нашем распоряжении появляется собственно gpsbabel, с помощью которого треки и скачиваем. 

Можно загрузить трек и точки маршрута с устройства при помощи программы gpsbabel, из командной строки. Если устройство подключено к /dev/ttyUSB0, а нужен трек с точками в формате GPX, то получить его можно так:

\begin{lstlisting}
$ gpsbabel -t -w -i garmin -f /dev/ttyUSB0 -o gpx -F мойтрек.gpx
\end{lstlisting}

% % Лицензия на материалы этого текста
% 
% Материалы сайта "Записки дебианщика" написаны virens и доступны на условиях лицензии Creative Commons Attribution-Non-Commercial-Share Alike 3.0 Unported License. Вы можете копировать, распространять, показывать эту работу, и создавать производные работы в некоммерческих целях на условиях:
% 
% 1) обязательной ссылки на автора (virens, http://mydebianblog.blogspot.com/) и
% 
% 2) распространении любых производных работ на условиях этой же лицензии (ссылка на эту лицензию 
% обязательна!).
% 
% Пожалуйста соблюдайте условия лицензии.
% 
% This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License. 
Другой способ получить эту информацию ? скопировать с устройства GPX-файл в режиме USB Mass Storage, а потом уже его конверировать-преобразовывать... Этот файл с названием вида ГГГГММДД.gpx появляется на карточке памяти только если включена соответствующая функция в приборе.
